package com.oneinlet

import java.math.BigDecimal


/**
 * BigDecimal 帮手，帮助你人性化简单处理各种常见运算
 *
 * @see     java.math.BigDecimal
 * @author  WangZihe
 */
object YCBigDecimal {

    enum class Result {
        /*左边小，右边大*/
        LEFT_LESS,
        /*两边相等*/
        EQUALS,
        /*左边大，右边小*/
        LEFT_GREATER
    }

    enum class Operator {
        /* 加法运算 */
        JIA,
        /* 减法运算 */
        JIAN,
        /* 乘法运算 */
        CHENG,
        /* 除法运算 */
        CHU
    }

    /**
     *  个性化比较两个值大小，返回结果清晰易见
     * @param left  左边比较值
     * @param right 右边比较值
     * @return  四舍五入保留有效两位小数
     * */
    fun compareTo(left: BigDecimal, right: BigDecimal): Result {
        return when {
            left < right -> Result.LEFT_LESS
            left == right -> Result.EQUALS
            else -> Result.LEFT_GREATER
        }
    }

    /**
     * 将数字转换为金钱格式化的标准值
     * @param num  接收一个数字字符串，可以是整型，或者单/双精度类型的字符串
     * @return  四舍五入保留有效两位小数
     * */
    fun toMoneyFormat(num: String): BigDecimal {
        return BigDecimal(num).setScale(2, BigDecimal.ROUND_HALF_UP)
    }

    /**
     * 符合中国人习惯的计算方式，英语好请直接忽略！！
     * @param left  左边比较值
     * @param right 右边比较值
     * @param operator 操作运算符
     * @return  计算后的结果值
     * */
    fun calculate(left: BigDecimal, right: BigDecimal, operator: Operator): BigDecimal {

        return when (operator) {
            Operator.JIA -> {
                left.add(right)
            }
            Operator.JIAN -> {
                left.subtract(right)
            }
            Operator.CHENG -> {
                left.multiply(right)
            }
            Operator.CHU -> {
                left.divide(right)
            }
        }

    }

    fun isGreaterZero(value: BigDecimal?): Boolean {
        return value != null && value > BigDecimal.ZERO
    }

    fun isEqualZero(value: BigDecimal?): Boolean {
        return value != null && value == BigDecimal.ZERO
    }

    fun isLessZero(value: BigDecimal?): Boolean {
        return value != null && value < BigDecimal.ZERO
    }


}